-1,
G_PARAM_READABLE | G_PARAM_WRITABLE));
-
+
+ gtk_widget_class_install_style_property (widget_class,
+ g_param_spec_boxed ("cursor_color",
+ _("Cursor color"),
+ _("Color with which to draw insertion cursor"),
+ GTK_TYPE_GDK_COLOR,
+ G_PARAM_READABLE));
+
signals[INSERT_TEXT] =
gtk_signal_new ("insert_text",
GTK_RUN_LAST,
G_OBJECT_CLASS (parent_class)->finalize (object);
}
+static void
+gtk_entry_realize_cursor_gc (GtkEntry *entry)
+{
+ GdkColor *cursor_color;
+
+ if (entry->cursor_gc)
+ gdk_gc_unref (entry->cursor_gc);
+
+ gtk_widget_style_get (GTK_WIDGET (entry), "cursor_color", &cursor_color, NULL);
+ if (cursor_color)
+ {
+ entry->cursor_gc = gdk_gc_new (entry->text_area);
+ gdk_gc_set_rgb_fg_color (entry->cursor_gc, cursor_color);
+ }
+ else
+ entry->cursor_gc = gdk_gc_ref (GTK_WIDGET (entry)->style->bg_gc[GTK_STATE_SELECTED]);
+}
+
static void
gtk_entry_realize (GtkWidget *widget)
{
gdk_window_set_user_data (entry->text_area, entry);
gdk_cursor_destroy (attributes.cursor);
-
+
widget->style = gtk_style_attach (widget->style, widget->window);
+ gtk_entry_realize_cursor_gc (entry);
+
gdk_window_set_background (widget->window, &widget->style->base[GTK_WIDGET_STATE (widget)]);
gdk_window_set_background (entry->text_area, &widget->style->base[GTK_WIDGET_STATE (widget)]);
entry->text_area = NULL;
}
+ if (entry->cursor_gc)
+ {
+ gdk_gc_unref (entry->cursor_gc);
+ entry->cursor_gc = NULL;
+ }
+
if (entry->popup_menu)
- gtk_widget_destroy (entry->popup_menu);
+ {
+ gtk_widget_destroy (entry->popup_menu);
+ entry->popup_menu = NULL;
+ }
if (GTK_WIDGET_CLASS (parent_class)->unrealize)
(* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget);
gdk_window_set_background (widget->window, &widget->style->base[GTK_WIDGET_STATE (widget)]);
gdk_window_set_background (entry->text_area, &widget->style->base[GTK_WIDGET_STATE (widget)]);
+
+ gtk_entry_realize_cursor_gc (entry);
}
}
gtk_entry_get_cursor_locations (entry, type, &strong_x, &weak_x);
- gdk_draw_line (entry->text_area, widget->style->bg_gc[GTK_STATE_SELECTED],
+ gdk_draw_line (entry->text_area, entry->cursor_gc,
xoffset + strong_x, INNER_BORDER,
xoffset + strong_x, text_area_height - INNER_BORDER);
#include "gtksignal.h"
#include "gtkinvisible.h"
-static void gtk_invisible_class_init (GtkInvisibleClass *klass);
-static void gtk_invisible_init (GtkInvisible *invisible);
-static void gtk_invisible_destroy (GtkObject *object);
-static void gtk_invisible_realize (GtkWidget *widget);
-static void gtk_invisible_show (GtkWidget *widget);
-static void gtk_invisible_size_allocate (GtkWidget *widget,
- GtkAllocation *allocation);
+static void gtk_invisible_class_init (GtkInvisibleClass *klass);
+static void gtk_invisible_init (GtkInvisible *invisible);
+static void gtk_invisible_destroy (GtkObject *object);
+static void gtk_invisible_realize (GtkWidget *widget);
+static void gtk_invisible_style_set (GtkWidget *widget,
+ GtkStyle *previous_style);
+static void gtk_invisible_show (GtkWidget *widget);
+static void gtk_invisible_size_allocate (GtkWidget *widget,
+ GtkAllocation *allocation);
GtkType
gtk_invisible_get_type (void)
object_class = (GtkObjectClass*) class;
widget_class->realize = gtk_invisible_realize;
+ widget_class->style_set = gtk_invisible_style_set;
widget_class->show = gtk_invisible_show;
widget_class->size_allocate = gtk_invisible_size_allocate;
widget->style = gtk_style_attach (widget->style, widget->window);
}
+static void
+gtk_invisible_style_set (GtkWidget *widget,
+ GtkStyle *previous_style)
+{
+ /* Don't chain up to parent implementation */
+}
+
static void
gtk_invisible_show (GtkWidget *widget)
{